package org.example.day06;

/**
 * 第二章节:2.3.2.3: volatile中 i++ 操作是非原子性的
 *      case1: 总数小于10000
 *      case2: 总数等于10000
 *      volatile关键字：可以保证可见性，不能保证原子性
 * Question: 仅仅使用synchronized就可以保证原子性操作，为何还要使用volatile?
 **/
public class MyThread7 extends Thread{
    volatile public static int count;
    //case1:
//    private static void addCount(){
//        for (int i = 0; i < 100; i++) {
//            count++;
//        }
//        System.out.println("count = " + count);
//    }

    //case2:
    synchronized private static void addCount(){
        for (int i = 0; i < 100; i++) {
            count++;
        }
        System.out.println("count = " + count);
    }
    @Override
    public void run(){
        addCount();
    }

    public static void main(String[] args) {
        //仅new一个空数组
        MyThread7[] array = new MyThread7[100];
        for (int i = 0; i < 100; i++) {
            array[i] = new MyThread7();
        }
        for (int i = 0; i < 100; i++) {
            array[i].start();
        }
    }
}
